﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Lhxzn.LangExtractor.ContextSearcher;

#region 文件信息
/****************************************************************
*	公司名称：福建力和行智能科技有限公司
*   作    者：Jeff
*   CLR 版本：4.0.30319.42000
*   创建时间：1/2/2025 3:16:00 PM
*	用 户 名：zheqichen 
*   描述说明：
*
*   修改历史：
*		1）	修 改 人：
*			修改日期：
*			修改内容：			
*
*****************************************************************/
#endregion


namespace Lhxzn.LangExtractor
{
    /// <summary>
    /// 类    名:UcSearch
    /// 描    述:
    /// 修改时间:1/2/2025 3:16:00 PM
    /// </summary>
    public partial class UcSearch : UserControl
    {

        #region 成员变量

        #region private



        #endregion


        #region protected

        public Action<string> SimulateNodeMouseClick;
        public Action<string, int, Color> HighLightText { get; set; }
        public LngFileManager LngFileManager { get; set; }
        public MatchInfo LastMatchInfo { get; set; }

        public TextBox TextBox { get => this.txt_SearchKey; }
        #endregion


        #region public


        #endregion

        #endregion


        #region 构造函数
        /// <summary>
        /// 函 数 名:构造函数
        /// 函数描述:默认构造函数
        /// 修改时间:1/2/2025 3:16:00 PM
        /// </summary>
        public UcSearch()
        {
            InitializeComponent();
            SetEvents();
        }
        #endregion

        #region 父类函数重载、接口实现

        #endregion

        #region 函数

        #region private



        #endregion


        #region protected
        protected void SetEvents()
        {
            this.btn_searchLast.Click += OnClickBtnSearchLast;
            this.btn_SearchNext.Click += OnClickBtnSearchNext;
            this.txt_SearchKey.TextChanged += OnTextChanged;
            this.txt_SearchKey.KeyDown += OnTextBoxKeyDown;

        }

        private void OnTextBoxKeyDown(object? sender, KeyEventArgs e)
        {
            // 检查按下的键是否是回车键
            if (e.KeyCode == Keys.Enter||e.KeyCode==Keys.F4)
            {
                OnClickBtnSearchNext(null,null);
                txt_SearchKey.Select();
            }else if (e.KeyCode == Keys.F3)
            {
                OnClickBtnSearchLast(null, null);
                txt_SearchKey.Select();
            }

        }

        private void OnTextChanged(object? sender, EventArgs e)
        {
            if (LngFileManager == null || LngFileManager.ContextSearcher == null)
            {
                return;
            }

            LngFileManager.ContextSearcher.SearchKeyword = txt_SearchKey.Text;
        }

        private void OnClickBtnSearchNext(object? sender, EventArgs e)
        {
            if(LngFileManager==null|| LngFileManager.ContextSearcher == null)
            {
                return;
            }

            MatchInfo matchInfo= LngFileManager.ContextSearcher.SearchNextInSelectedFile();
            if (matchInfo == null)
            {
                return;
            }

            if (matchInfo.LngFileName != LngFileManager.SelectedLngFileName)
            {
                SimulateNodeMouseClick.Invoke(matchInfo.LngFileName);
            }
            if (matchInfo == LastMatchInfo)
            {
                return;
            }
            HighLightText?.Invoke(matchInfo.Keyword,matchInfo.KeywordIndex,Color.OrangeRed);
            LastMatchInfo = matchInfo;
        }

        private void OnClickBtnSearchLast(object? sender, EventArgs e)
        {
            if (LngFileManager == null || LngFileManager.ContextSearcher == null)
            {
                return;
            }
            MatchInfo matchInfo = LngFileManager.ContextSearcher.SearchLastInSelectedFile();
            if (matchInfo == null)
            {
                return;
            }

            if (matchInfo.LngFileName != LngFileManager.SelectedLngFileName)
            {
                SimulateNodeMouseClick.Invoke(matchInfo.LngFileName);
            }
            if (matchInfo == LastMatchInfo)
            {
                return;
            }
            HighLightText?.Invoke(matchInfo.Keyword, matchInfo.KeywordIndex, Color.OrangeRed);
            LastMatchInfo= matchInfo;
        }


        #endregion


        #region public
        public void InitSearch(Action<string, int,Color> highLightText, Action<string> simulateNodeMouseClick, LngFileManager manager)
        {
            SimulateNodeMouseClick = simulateNodeMouseClick;
            HighLightText = highLightText;
            LngFileManager = manager;
        }

        #endregion

        #endregion

    }
}
